TypeScript Type Merging